import math

from matplotlib import pyplot as plot #用来绘制图形

import numpy as np  #用来处理数据

from mpl_toolkits.mplot3d import Axes3D  #用来给出三维坐标系。

def F3(arr,arr1): #Schaffer函数(-10,10) (-1.42513,-0.80032) (-186.7309)

    a = np.ones((len(arr), len(arr)))
    for ms in range(len(arr)):
        m = []
        for n in range(len(arr[ms])):
            print()
            fx = 0
            fx = fx - math.sin(arr[ms][n]) * ((math.sin(( 1 * arr[ms][n] ** 2) / math.pi)) ** (2 * 10))
            fx = fx - math.sin(arr1[ms][n]) * ((math.sin((2 * arr1[ms][n] ** 2) / math.pi)) ** (2 * 10))
            s=fx
            a[ms][n]=s

    return a
figure = plot.figure()
#画出三维坐标系：
axes = Axes3D(figure)
X = np.arange(-0, 4, 0.01)
Y = np.arange(-0, 4, 0.01)
#限定图形的样式是网格线的样式：
X, Y = np.meshgrid(X, Y)
Z = F3(X,Y)
#绘制曲面，采用彩虹色着色：
axes.plot_surface(X, Y, Z,cmap='rainbow')
#图形可视化：
plot.show()